import router from '@/router/index'
import 'element-ui/lib/theme-chalk/index.css'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { Message } from 'element-ui'
import store from '@/store'
import { getToken,getUserId } from '@/utils/auth'

NProgress.configure({
    easing: 'ease', // 动画方式
    speed: 500, // 递增进度条的速度
    showSpinner: false, // 是否显示加载ico
    trickleSpeed: 200, // 自动递增间隔
    minimum: 0.3 // 初始化时的最小百分比
})
// 白名单
const whiteList = ['/login','/index','/index/function','/index/product','/index/application','/index/home'] 

// 导航守卫
router.beforeEach((to, from, next) => {
    NProgress.start()
    try {

        //1、判断用户是否登录
        if (getToken()) {
            // console.log("检测到页面刷新了");
            //token已存在
            //判断用户是否刷新了页面
            let isRouters = store.getters.isRouters
            if (isRouters) {
                if(to.path === '/login'){
                    next({path : '/personalCenter/index'})
                }
                next()
            } else {       
              //获取菜单
                store.dispatch('permission/generateRouter', getUserId())
                .then( res =>{
                    if(res.length >= 1){
                        // console.log(store.getters.permission_routes);
                        const menuRouter = store.getters.permission_routes
                        for(let i=0;i<menuRouter.length;i++){
                            router.addRoute(menuRouter[i])
                        }
                        const redirect = decodeURIComponent(from.query.redirect || to.path)
                        if(to.path === redirect){
                            next({...to,replace: true}) // 
                        }
                        next({path : redirect})

                    } else {
                        Message({
                            message: '没有配置菜单，请联系管理员',
                            type: 'warning'
                        })
                    }
                })
            }
        } else {
            // console.log("白名单");
            //白名单直接放行
            if (whiteList.indexOf(to.path) !== -1) {
                next()
            } else {
                next('/login')
            }
        }
    } catch (error) {
        // console.log('出错了')
        next()
    }
})

router.afterEach(( to, from) => {
    NProgress.done()
})

/*
to:router即将进入的路由对象;
from:当前导航即将离开的路由;
next:Function,进行管道中的一个钩子，如果执行完了，则导航的状态就是 confirmed （确认的）；否则为false，终止导航。
*/